#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fastPow(ll a,ll n,ll mod)
{
	ll res = 1;
	a%=mod;
	//防止ans*a越界,题目中的例子a=a%9=2，同时取模操作不会改变(a^n)%mod的结果，因为（a%mod)^n%mod和a^n%mod是等价的


	while(n)//n的二进制表示为1010,因此循环会执行4次
	{
		if(n&1)
			res = (res*a)%mod;//取模，当 n 的某个二进制位为 1 时，res 会乘以对应的 a 的幂次
		a = (a*a)%mod;//无论 n 的最低位是 0 还是 1，都会将 a 自乘
		n >>= 1;//将 n 右移一位，相当于将 n 除以 2。这是因为在每次循环中，我们都处理了 n 的最低位，并将其从 n 中移除。
	}
	return res;
}
int main()
{
	ll b, p, k;
	cin >> b >> p >> k;
	cout<<fastPow(b,p,k);
	return 0;
}